{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实验项目名称：K近邻算法编程与实现  \n",
    "实验内容：基于K近邻算法实现指定数据集的回归分析  \n",
    "要求：  \n",
    "（1）读取训练nn_reg_train.csv和nn_reg_test.csv数据文件  \n",
    "（2）生成训练集和测试集X_train,y_train,X_test,y_test  \n",
    "（3）当weights=\"distance\",K=[1,2,...,100]时  \n",
    "   利用KNeighborsRegressor训练模型  \n",
    "（4）绘制不同K值下的回归sores曲线，寻找最佳K值  \n",
    "（5）绘制最佳K值下的y_test和y_pred曲线  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入依赖库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "from sklearn.metrics import r2_score,mean_squared_error"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入训练集文件数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-10.000000</td>\n",
       "      <td>3.003379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.251256</td>\n",
       "      <td>-9.899497</td>\n",
       "      <td>3.114083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.502513</td>\n",
       "      <td>-9.798995</td>\n",
       "      <td>3.039868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.753769</td>\n",
       "      <td>-9.698492</td>\n",
       "      <td>3.060130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.005025</td>\n",
       "      <td>-9.597990</td>\n",
       "      <td>2.890098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195</th>\n",
       "      <td>48.994975</td>\n",
       "      <td>9.597990</td>\n",
       "      <td>6.786919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>49.246231</td>\n",
       "      <td>9.698492</td>\n",
       "      <td>6.533328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>197</th>\n",
       "      <td>49.497487</td>\n",
       "      <td>9.798995</td>\n",
       "      <td>7.539849</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>49.748744</td>\n",
       "      <td>9.899497</td>\n",
       "      <td>7.379129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>50.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>7.608623</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             0          1         2\n",
       "0     0.000000 -10.000000  3.003379\n",
       "1     0.251256  -9.899497  3.114083\n",
       "2     0.502513  -9.798995  3.039868\n",
       "3     0.753769  -9.698492  3.060130\n",
       "4     1.005025  -9.597990  2.890098\n",
       "..         ...        ...       ...\n",
       "195  48.994975   9.597990  6.786919\n",
       "196  49.246231   9.698492  6.533328\n",
       "197  49.497487   9.798995  7.539849\n",
       "198  49.748744   9.899497  7.379129\n",
       "199  50.000000  10.000000  7.608623\n",
       "\n",
       "[200 rows x 3 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train=pd.read_csv(\"nn_reg_train.csv\",header=None)\n",
    "df_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入测试集文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.350133</td>\n",
       "      <td>-10.239371</td>\n",
       "      <td>2.863442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.209960</td>\n",
       "      <td>-10.290831</td>\n",
       "      <td>2.801287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.697229</td>\n",
       "      <td>-9.194257</td>\n",
       "      <td>2.903997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.154239</td>\n",
       "      <td>-9.049417</td>\n",
       "      <td>3.107480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.892722</td>\n",
       "      <td>-9.350229</td>\n",
       "      <td>3.164975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>47.551212</td>\n",
       "      <td>9.171792</td>\n",
       "      <td>7.063819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>48.424441</td>\n",
       "      <td>9.765263</td>\n",
       "      <td>6.889295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>48.762513</td>\n",
       "      <td>9.962576</td>\n",
       "      <td>6.947982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>49.436264</td>\n",
       "      <td>9.409351</td>\n",
       "      <td>7.074984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>50.278616</td>\n",
       "      <td>9.854930</td>\n",
       "      <td>7.579977</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            0          1         2\n",
       "0    0.350133 -10.239371  2.863442\n",
       "1    0.209960 -10.290831  2.801287\n",
       "2    0.697229  -9.194257  2.903997\n",
       "3    1.154239  -9.049417  3.107480\n",
       "4    1.892722  -9.350229  3.164975\n",
       "..        ...        ...       ...\n",
       "95  47.551212   9.171792  7.063819\n",
       "96  48.424441   9.765263  6.889295\n",
       "97  48.762513   9.962576  6.947982\n",
       "98  49.436264   9.409351  7.074984\n",
       "99  50.278616   9.854930  7.579977\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test = pd.read_csv(\"nn_reg_test.csv\",header=None)\n",
    "df_test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 生成X_train,y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train1=df_train.values\n",
    "X_train = df_train1[:,:2]\n",
    "y_train = df_train1[:,2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 生成X_test和y_test "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test1 = df_test.values\n",
    "X_test = df_test1[:,:2]\n",
    "y_test = df_test1[:,2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 设置训练模型参数 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,\n",
       "        14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,\n",
       "        27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,\n",
       "        40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,\n",
       "        53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,\n",
       "        66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,\n",
       "        79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,\n",
       "        92,  93,  94,  95,  96,  97,  98,  99, 100])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(1,101)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_reg = KNeighborsRegressor(n_neighbors=100,\\\n",
    "                              weights=\"distance\"\\\n",
    "                             )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练模型 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsRegressor(n_neighbors=100, weights='distance')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_reg.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.95642039777665"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_reg.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "当前最佳k值为1\n",
      "当前最高得分为0.9586016712686439\n",
      "当前最佳k值为2\n",
      "当前最高得分为0.9751741231420532\n",
      "当前最佳k值为3\n",
      "当前最高得分为0.9827644284579699\n",
      "当前最佳k值为4\n",
      "当前最高得分为0.9849301639934861\n",
      "当前最佳k值为5\n",
      "当前最高得分为0.9860445192448739\n",
      "当前最佳k值为6\n",
      "当前最高得分为0.987184325692374\n",
      "当前最佳k值为8\n",
      "当前最高得分为0.9878500923837064\n",
      "当前最佳k值为9\n",
      "当前最高得分为0.9879314799517037\n",
      "当前最佳k值为11\n",
      "当前最高得分为0.9879374974340169\n"
     ]
    }
   ],
   "source": [
    "max_score=0\n",
    "for k in np.arange(1,101):\n",
    "    knn_reg = KNeighborsRegressor(n_neighbors=k,\\\n",
    "                              weights=\"distance\"\\\n",
    "                             )\n",
    "    knn_reg.fit(X_train,y_train)\n",
    "    tmp_score=knn_reg.score(X_test,y_test)\n",
    "    if tmp_score>=max_score:\n",
    "        max_score=tmp_score\n",
    "        max_k=k\n",
    "        print(f'当前最佳k值为{max_k}')\n",
    "        print(f'当前最高得分为{max_score}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘制曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_reg=KNeighborsRegressor(n_neighbors=max_k,weights=\"distance\")\n",
    "knn_reg.fit(X_train,y_train)\n",
    "y_pred = knn_reg.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'y值')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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402bjO9xxgS/UT8dQv6HGZhWmjFbTXRdV8HRVdC1K4TUuWdS+9buc9E0xGazNfguf7bjjT2nIX/+85957LHHmDZtGp9++ikjR47kqaeeIjExkZKSEmynjcgXFhZyySWX8PzzzwPw/fffExkZyeTJk/nmm28ICgpi7NixeDweLr/8cgD+/ve/s3nzZoKDgzGbzdxzzz3ExcUREBAAwAcffEBERES9Zbzuuuu45pprOHbsmDevy4oVK3jkkUe8M3leeOGFM16Xn5/P22+/zWOPPcasWbPIrtF9JSLcc889TJs2jUmTJjFz5syz5ozZuXMnTzzxRK3H2rnL6XTimOUgOz0bT4CHrIuA8ZCdDIHrW6nrrmoXuQsvZM/xPSwLzebeUfDi7R8SOGcOuz3Q72GYuxXeWp7fOmXyId0B2gJfffUVW7ZsYc6cOWRnZ/Phhx/y1FNPERQUxOOPP86MGTNqzfnOz88nMzOT22+/nRdeeIHdu3eTmJhIaWkpd911F88++ywvvPACH330EV27diUpKYkHHniA8PBw7r33Xp555hnuuusuEhMTsVgsXHXVVbzwwgv06tULMFr8F110EbGxsbz++uve+5pMJkSEL7/80tuCvuKKK0hLS2PlypXMnj2bXr168e2335KamorD4SAiIoL58+ezadMm71hA1T0+++wzJkyYwMmTJ3nmmWdITk5m5MiRvPjii2cs5hIR76eMMWPGsG7dOu/XmDFj8Hg8jV5pq3UujlkOssKycD/oRirw9ndLPFSUuKA1FsSlpkJkJISG8rfkvyHA/ZsD4V//IlYpXgaGHoWV59ExF0DVN72mtb/Gjh1b5xSg9jxNLi0tTf7973+LiMj06dPlvffeExGRo0ePyj333CNut1uio6MlISFBRER2794tn332mYiIfP/997WmOIqIzJkzR7p06SKHDh2SkydPSkJCgjz88MOyc+dOERF5+eWX5b777hMRkfLycvnoo4/k1ltvlfz8fBERee2116S0tNRbtuzsbBER2b9/v1x33XWyYMECOX78uPd+//u//ysTJkyQv/71r3Ly5MlaZdm0aZNceeWV8otf/EJERDwej9x7773Sp08fcTgcsmLFilrn79mzR6699lpvXasMHTpUFi5cKBMmTDhjKubkyZNl4sSJ8s4779T7O27Pf3+tZcwBZuF3CE8g9EO4BOPx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"font.family\"] = \"SimHei\"\n",
    "plt.plot(np.linspace(0,100,100),y_test,\".-r\",lw=1.5,mec=\"k\",ms=8)\n",
    "plt.plot(np.linspace(0,100,100),y_pred,\".-g\",lw=1.5,mec=\"k\",ms=8)\n",
    "plt.legend([\"测试集的真实值\",\"测试集的预测值\"],loc=0,numpoints=3,fontsize=12)\n",
    "plt.xlabel(\"样本个数\",fontsize=12)\n",
    "plt.ylabel(\"y值\",fontsize=12)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:root] *",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
